
/***
 * @Description: 负责内存存储的管理，对固定长度的存储分配，包括数据包需要的空白链表的获取，释放，内存锁的应用的头文件
 * @Author: Liverpool
 * @Date: 2024-02-21 22:33:55
 * @LastEditTime: 2024-02-21 22:37:57
 * @LastEditors: Liverpool
 */
#ifndef MEMORY_BLOCK_H
#define MEMORY_BLOCK_H

#include "system.h"
#include "list.h"
#include "locker.h"
#include "debug.h"

// 内存存储管理通用结构体
typedef struct _memory_block_t
{
    D_List free_list;    // 可供分配的空白链表
    void *start;         // 可供分配的起始指针
    D_Locker locker;     // 对内存管理的互斥锁
    sys_sem_t alloc_sem; // 运行分配的内存信号量
} D_MemoryBlock;

net_err_t memory_block_init(D_MemoryBlock *block, void *memory, int block_size, int block_cnt, D_LockerType locker_type); // 对内存数组进行固定长度的初始化
void *memory_block_alloc(D_MemoryBlock *block, int ms);                                                                   // 用于分配内存块
int memory_block_free_cnt(D_MemoryBlock *block);                                                                          // 得到该内存链表中剩余的空闲结点数
void memory_block_free(D_MemoryBlock *block, void *block_node);                                                           // 释放内存块到内存管理链表中
void memory_block_destroy(D_MemoryBlock *block);                                                                          // 销毁该内存管理链表

#endif // !MEMORY_BLOCK_H
